.TH std::chrono::operator+,std::chrono::operator-(std::chrono::year_month) 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::chrono::operator+,std::chrono::operator-(std::chrono::year_month) \- std::chrono::operator+,std::chrono::operator-(std::chrono::year_month)

.SH Synopsis
   constexpr std::chrono::year_month operator+( const
   std::chrono::year_month& ym,                                       \fB(1)\fP \fI(since C++20)\fP
                                                const
   std::chrono::years& dy ) noexcept;
   constexpr std::chrono::year_month operator+( const
   std::chrono::years& dy,                                            \fB(2)\fP \fI(since C++20)\fP
                                                const
   std::chrono::year_month& ym ) noexcept;
   constexpr std::chrono::year_month operator+( const
   std::chrono::year_month& ym,                                       \fB(3)\fP \fI(since C++20)\fP
                                                const
   std::chrono::months& dm ) noexcept;
   constexpr std::chrono::year_month operator+( const
   std::chrono::months& dm,                                           \fB(4)\fP \fI(since C++20)\fP
                                                const
   std::chrono::year_month& ym ) noexcept;
   constexpr std::chrono::year_month operator-( const
   std::chrono::year_month& ym,                                       \fB(5)\fP \fI(since C++20)\fP
                                                const
   std::chrono::years& dy ) noexcept;
   constexpr std::chrono::year_month operator-( const
   std::chrono::year_month& ym,                                       \fB(6)\fP \fI(since C++20)\fP
                                                const
   std::chrono::months& dm ) noexcept;
   constexpr std::chrono::months operator-( const
   std::chrono::year_month& ym1,                                      \fB(7)\fP \fI(since C++20)\fP
                                            const
   std::chrono::year_month& ym2 ) noexcept;

   1,2) Adds dy.count() years to ym.
   3,4) Adds dm.count() months to ym.
   5) Subtracts dy.count() years from ym.
   6) Subtracts dm.count() months from ym.
   7) Returns the difference in months between the two time points represented by ym1
   and ym2.

   For durations that are convertible to both std::chrono::years and
   std::chrono::months, the years overloads (1,2,5) are preferred if the call would
   otherwise be ambiguous.

.SH Return value

   1,2) std::chrono::year_month(ym.year() + dy, ym.month())
   3,4) A year_month value z such that z - ym == dm and z.ok() == true.
   5) ym + -dy
   6) ym + -dm
   7)
   ym1.year() - ym2.year() + std::chrono::months(int(unsigned(ym1.month())) -
   int(unsigned(ym2.month())))

.SH Notes

   The result of subtracting two year_month values is a duration of type
   std::chrono::months. This duration unit represents the length of the average
   Gregorian month (30.436875 days), and the resulting duration bears no relationship
   to the actual number of days in the time period at issue. For example, the result of
   2017y/3 - 2017y/2 is std::chrono::months\fB(1)\fP, even though February 2017 only contains
   28 days.

.SH Example


// Run this code

 #include <cassert>
 #include <chrono>

 int main()
 {
     auto ym{std::chrono::year(2021)/std::chrono::July};

     ym = ym + std::chrono::months(14);
     assert(ym.month() == std::chrono::September);
     assert(ym.year() == std::chrono::year(2022));

     ym = ym - std::chrono::years(3);
     assert(ym.month() == std::chrono::month(9));
     assert(ym.year() == std::chrono::year(2019));

     ym = ym + (std::chrono::September - std::chrono::month(2));
     assert(ym.month() == std::chrono::April);
     assert(ym.year() == std::chrono::year(2020));
 }

.SH See also

   operator+= modifies the year_month by some number of months or years
   operator-= \fI(public member function)\fP
